home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 March / PCWorld_2001-03_cd.bin / Software / TemaCD / classbuild / ClassBuilder 2.2 PR405 Setup.exe / {app} / Include / CB_ValueTreeOwned.h < prev   
C/C++ Source or Header  |  2000-04-06  |  8KB  |  240 lines

  1. #ifndef CB_VALUETREE_OWNED_H
  2. #define CB_VALUETREE_OWNED_H
  3.  
  4. #include "CB_ValueTree.h"
  5.  
  6. // defines for include files
  7. #define RELATION_TEMPLATE_VALUETREE_OWNED_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  8. private:\
  9.     ClassTo* _first##NameTo;\
  10.     int _count##NameTo;\
  11. \
  12. public:\
  13.     void Add##NameTo(ClassTo* item)\
  14.     {\
  15.         METHOD_VALUETREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  16.     }\
  17.     void Remove##NameTo(ClassTo* item)\
  18.     {\
  19.         METHOD_VALUETREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  20.     }\
  21.     void RemoveAll##NameTo()\
  22.     {\
  23.         METHOD_VALUETREE_REMOVEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  24.     }\
  25.     void DeleteAll##NameTo()\
  26.     {\
  27.         METHOD_VALUETREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  28.     }\
  29.     void Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  30.     {\
  31.         METHOD_VALUETREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  32.     }\
  33.     ClassTo* GetFirst##NameTo() const\
  34.     {\
  35.         METHOD_VALUETREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  36.     }\
  37.     ClassTo* GetLast##NameTo() const\
  38.     {\
  39.         METHOD_VALUETREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  40.     }\
  41.     ClassTo* GetNext##NameTo(ClassTo* pos) const\
  42.     {\
  43.         METHOD_VALUETREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  44.     }\
  45.     ClassTo* GetPrev##NameTo(ClassTo* pos) const\
  46.     {\
  47.         METHOD_VALUETREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  48.     }\
  49.     int Get##NameTo##Count() const\
  50.     {\
  51.         METHOD_VALUETREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  52.     }\
  53.     ITERATOR_TEMPLATE_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  54.  
  55. #define RELATION_TEMPLATE_NOFILTER_VALUETREE_OWNED_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  56. private:\
  57.     ClassTo* _first##NameTo;\
  58.     int _count##NameTo;\
  59. \
  60. public:\
  61.     void Add##NameTo(ClassTo* item)\
  62.     {\
  63.         METHOD_VALUETREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  64.     }\
  65.     void Remove##NameTo(ClassTo* item)\
  66.     {\
  67.         METHOD_VALUETREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  68.     }\
  69.     void RemoveAll##NameTo()\
  70.     {\
  71.         METHOD_VALUETREE_REMOVEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  72.     }\
  73.     void DeleteAll##NameTo()\
  74.     {\
  75.         METHOD_VALUETREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  76.     }\
  77.     void Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  78.     {\
  79.         METHOD_VALUETREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  80.     }\
  81.     ClassTo* GetFirst##NameTo() const\
  82.     {\
  83.         METHOD_VALUETREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  84.     }\
  85.     ClassTo* GetLast##NameTo() const\
  86.     {\
  87.         METHOD_VALUETREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  88.     }\
  89.     ClassTo* GetNext##NameTo(ClassTo* pos) const\
  90.     {\
  91.         METHOD_VALUETREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  92.     }\
  93.     ClassTo* GetPrev##NameTo(ClassTo* pos) const\
  94.     {\
  95.         METHOD_VALUETREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  96.     }\
  97.     int Get##NameTo##Count() const\
  98.     {\
  99.         METHOD_VALUETREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  100.     }\
  101.     ITERATOR_TEMPLATE_NOFILTER_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  102.  
  103. #define RELATION_VALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  104. private:\
  105.     ClassTo* _first##NameTo;\
  106.     int _count##NameTo;\
  107. \
  108. protected:\
  109. \
  110. public:\
  111.     void Add##NameTo(ClassTo* item);\
  112.     void Remove##NameTo(ClassTo* item);\
  113.     void DeleteAll##NameTo();\
  114.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  115.     ClassTo* GetFirst##NameTo() const;\
  116.     ClassTo* GetLast##NameTo() const;\
  117.     ClassTo* GetNext##NameTo(ClassTo* pos) const;\
  118.     ClassTo* GetPrev##NameTo(ClassTo* pos) const;\
  119.     int Get##NameTo##Count() const;\
  120.     ITERATOR_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  121.  
  122. #define RELATION_NOFILTER_VALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  123. private:\
  124.     ClassTo* _first##NameTo;\
  125.     int _count##NameTo;\
  126. \
  127. protected:\
  128. \
  129. public:\
  130.     void Add##NameTo(ClassTo* item);\
  131.     void Remove##NameTo(ClassTo* item);\
  132.     void DeleteAll##NameTo();\
  133.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  134.     ClassTo* GetFirst##NameTo() const;\
  135.     ClassTo* GetLast##NameTo() const;\
  136.     ClassTo* GetNext##NameTo(ClassTo* pos) const;\
  137.     ClassTo* GetPrev##NameTo(ClassTo* pos) const;\
  138.     int Get##NameTo##Count() const;\
  139.     ITERATOR_NOFILTER_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  140.  
  141. #define RELATION_VALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  142.     RELATION_VALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  143.  
  144. // defines implementation
  145. #define INIT_VALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  146.    INIT_VALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  147.  
  148. #define EXIT_VALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  149.     { for (ClassTo* item = GetFirst##NameTo(); item; item = GetFirst##NameTo())\
  150.           delete item; }
  151.  
  152. #define REPLACE_VALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  153.     REPLACE_VALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  154.  
  155. #define INIT_VALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  156.     _ref##NameFrom = (ClassFrom*)0;\
  157.     _parent##NameFrom = (ClassTo*)0;\
  158.     _left##NameFrom = (ClassTo*)0;\
  159.     _right##NameFrom = (ClassTo*)0;\
  160.     _sibling##NameFrom = (ClassTo*)0;\
  161.     assert(p##NameFrom);\
  162.     p##NameFrom->Add##NameTo(this);
  163.  
  164. #define EXIT_VALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  165.     EXIT_VALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  166.  
  167. #define REPLACE_VALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  168.     _ref##NameFrom = (ClassFrom*)0;\
  169.     _parent##NameFrom = (ClassTo*)0;\
  170.     _left##NameFrom = (ClassTo*)0;\
  171.     _right##NameFrom = (ClassTo*)0;\
  172.     _sibling##NameFrom = (ClassTo*)0;\
  173.     pOld->_ref##NameFrom->Replace##NameTo(pOld, this);
  174.  
  175. #define REMOVE_VALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  176.     { for (ClassTo* item = GetFirst##NameTo(); item; item = GetFirst##NameTo())\
  177.           (void)new UndoSubDelete(item); }
  178.  
  179. #define SAVE_VALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  180.     SAVE_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  181.  
  182. #define RESTORE_VALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  183.     RESTORE_VALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  184.  
  185. #define REMOVE_VALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  186.     REMOVE_VALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  187.  
  188. #define CLEANUP_VALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  189.     CLEANUP_VALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  190.  
  191. #define METHODS_VALUETREE_OWNED_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  192. void ClassFrom##::Add##NameTo(ClassTo* item)\
  193. {\
  194.     METHOD_VALUETREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  195. }\
  196. \
  197. void ClassFrom##::Remove##NameTo(ClassTo* item)\
  198. {\
  199.     METHOD_VALUETREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  200. }\
  201. \
  202. void ClassFrom##::DeleteAll##NameTo()\
  203. {\
  204.     METHOD_VALUETREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  205. }\
  206. \
  207. void ClassFrom##::Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  208. {\
  209.     METHOD_VALUETREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  210. }\
  211. \
  212. ClassTo* ClassFrom##::GetFirst##NameTo() const\
  213. {\
  214.     METHOD_VALUETREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  215. }\
  216. \
  217. ClassTo* ClassFrom##::GetLast##NameTo() const\
  218. {\
  219.     METHOD_VALUETREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  220. }\
  221. \
  222. ClassTo* ClassFrom##::GetNext##NameTo(ClassTo* pos) const\
  223. {\
  224.     METHOD_VALUETREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  225. }\
  226. \
  227. ClassTo* ClassFrom##::GetPrev##NameTo(ClassTo* pos) const\
  228. {\
  229.     METHOD_VALUETREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  230. }\
  231. \
  232. int ClassFrom##::Get##NameTo##Count() const\
  233. {\
  234.     METHOD_VALUETREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  235. }
  236.  
  237. #define METHODS_VALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  238.  
  239. #endif
  240.